home *** CD-ROM | disk | FTP | other *** search
-
- SECTION mysine,CODE_C
-
-
- adr1 = 4 ; wibble speed
- adr2 = 8 ; up down speed
-
-
-
- ; The EXEC functions used
- EXECBASE = 4
-
- FORBID = -132
- PERMIT = -138
- OPEN_LIBRARY = -408
- CLOSE_LIBRARY = -414
- ALLOCMEM = -198
- FREEMEM = -210
-
- ; Custom Chips
-
- dmacon = $dff096
-
-
-
- move.l EXECBASE,a6
- jsr FORBID(a6)
-
- lea gfxname(pc),a1
- jsr OPEN_LIBRARY(a6)
-
-
- move.l d0,a6
- move.l d0,GfxBase
-
- bsr GetMem
-
- MOVE.L bitmaparea,d1
-
- move.w d1,PlaneLo
- swap d1
- move.w d1,PlaneHi
-
- jsr makecopper
- bsr repointCOPPER
-
-
-
- again:
- ;move.l #35,d1
-
- delay: cmpi.b #$ff,$dff006
- bne delay
-
- ;dbra d1,delay
-
- bsr scroll
-
-
- bsr putontext
-
-
-
- btst #6,$bfe001
- bne again
-
- bsr resetCOPPER
-
-
- bsr Freememf
-
-
- move.l GfxBase,a1
- move.l EXECBASE,a6
- jsr CLOSE_LIBRARY(a6)
-
- rts
-
- GetMem:
- move.l #$65000,chararea
- move.l #$70000,bitmaparea
-
- move.l #$65000,a0
- move.l #$78000,a1
- again2: move.b #0,(a0)+
- cmp.l a1,a0
- bne again2
-
-
- rts
-
-
- move.l EXECBASE,a6
-
- move.l #42*32,d0
- move.l #$10003,d1
-
- jsr ALLOCMEM(a6)
-
- move.l d0,chararea
-
-
- move.l #8000,d0
- move.l #$10003,d1
-
- jsr ALLOCMEM(a6)
-
- move.l d0,bitmaparea
-
-
- rts
-
- Freememf:
- rts
-
- move.l EXECBASE,a6
-
- move.l #42*32,d0
- move.l chararea,a1
- jsr FREEMEM(a6)
-
-
- move.l #8000,d0
- move.l bitmaparea,a1
- jsr FREEMEM(a6)
-
-
- rts
-
-
-
- repointCOPPER:
- move.l GfxBase,a1
- move.l $32(a1),oldcopper
- move.w #$0080,dmacon
- clr.w $dff088
- move.l #NewCopper,$32(a1)
- move.w #$84a0,dmacon
- rts
-
- resetCOPPER:
-
- move.w #$0080,dmacon
- move.l GfxBase,a0
- move.l oldcopper,$32(a0)
- move.w #$84a0,dmacon
- rts
-
- putontext:
- move.l nextsine,a0
-
- move.l a0,a1
- adda.l #adr2,a1 ; Step value through table
- ; Higher multiples of 2 faster
-
- cmpa.l #endsine,a1
- blt okpot
-
- move.l #sinetab,a1
-
- okpot: move.l a1,nextsine
-
-
-
- move.l #0,d6
- move.l #40,d5
-
-
- move.l chararea,d0
- MOVE.L bitmaparea,d1
-
- addi.l #40*160,d1
-
- move.l #$DFF000,A6
-
- move.w #20-1,d6
-
- move.w #32*64+1,d5
-
-
- ; d1 = destn (middle of screen)
- ; d0 = chararea
-
-
- clr.w $042(A6)
-
-
- move.w #40,$064(A6)
- move.w #38,$062(a6)
- move.w #38,$066(a6)
-
- move.l #$dff050,a5
- move.l #$dff054,a4
- move.l #$dff04c,a3
- move.l #$dff058,a2
- move.l #$dff040,a1
- move.l #$dff046,a6
-
-
-
- blitloop:
-
- move.l d1,d7
-
- add.w (a0),d7
-
- adda.l #adr1,a0 ; faster sine
-
- cmpa.l #endsine,a0
- bne oknoendsine
-
- lea sinetab,a0
-
- oknoendsine:
-
-
-
-
- move.l d0,(a5) ; srce
- move.l d7,(a4) ; Dest
-
-
- move.w #$f000,d3
-
- move.w d3,(A6) ; Set all masks on
-
- MOVE.W #%0000100111110000,(a1)
-
-
- move.w d5,(a2)
-
-
- move.w #2,d4
-
-
-
- MOVE.W #%0000110111111100,(a1)
-
-
- blitloop2:
-
-
- move.l d1,d7
- add.w (a0),d7
- adda.l #adr1,a0 ; Faster Sine
-
-
- cmpa.l #endsine,a0
- blt oknoendsine2
-
- lea sinetab,a0
-
- oknoendsine2:
-
- move.l d0,(a5) ; srce
- move.l d7,(a3)
- move.l d7,(a4) ; Dest
-
-
- ror.w #4,d3
- move.w d3,(A6) ; Set all masks on
-
- move.w d5,(a2)
-
- dbra d4,blitloop2
-
-
- addq.l #2,d0
- addq.l #2,d1
-
-
- dbra d6,blitloop
-
-
- rts
-
-
-
- scroll:
-
-
- move.l #$DFF000,A6
-
- MOVE.L chararea,d0
-
- move.l d0,d1
- addq.l #2,d1 ; a2 points to next word
-
- move.l d1,$50(a6) ; srce
- move.l d0,$54(a6) ; Dest
-
- clr.w $064(A6) ; No modulos
- clr.w $066(A6)
-
- move.l #-1,$044(A6) ; Set all masks on
-
- clr.w $042(A6)
-
- MOVE.W #%1101100111110000,$040(a6)
-
-
- move.w #32*64+22,$058(a6)
-
-
-
- subq.b #1,charcount
- bne nocharyet
- move.b #5,charcount
-
-
- move.l textptr,a0
- clr.l d0
- move.b (a0)+,d0
- cmpi.b #0,(a0)
- bne nottextend
-
- move.l #texttab,a0
-
- nottextend:
- move.l a0,textptr
- bsr putletter
-
- nocharyet:
-
- rts
-
-
-
-
- ; ******************************
- ; * Place letter on the screen *
- ; ******************************
- putletter:
-
-
- lea fontmap,a0
-
- subi.b #32,d0
-
- rndagain: cmpi.b #20,d0
- blt okputchar
-
- adda.l #40*16,a0 ; Size of 1 line of chs
- subi.b #20,d0
- bra rndagain
-
- okputchar: rol.b #1,d0
- andi.b #$fe,d0
-
- add.l a0,d0
-
-
-
- move.l #$DFF000,A6
-
- move.l chararea,d1
- addi.l #42*8+40,d1
-
-
- move.l d0,$50(a6)
- move.l d1,$54(A6)
-
-
- MOVE.W #38,$064(A6)
- MOVE.W #40,$066(A6)
-
- move.l #-1,$044(A6) ; Set all masks on
-
- clr.w $042(A6)
-
- MOVE.W #%0000100111110000,$040(a6)
-
-
- move.w #64*16+1,$058(a6)
-
-
-
- RTS
-
-
- gfxname: dc.b "graphics.library",0
- EVEN
- GfxBase: ds.l 1
- bitmaparea: ds.l 1
- chararea: ds.l 1
-
- charcount: dc.b 16
-
- EVEN
-
- oldcopper: ds.l 1
-
- even
-
- NewCopper:
-
-
- dc.w $0100,$1000
- dc.w $0180,0
-
- dc.w $008e,$2c81
- dc.w $0090,$2cc1
- dc.w $0092,$0038
- dc.w $0094,$00d0
-
- dc.w $180,0
- dc.w $182,$fff
-
- dc.w $00e0
- PlaneHi: dc.w $0007
-
- dc.w $00e2
- PlaneLo: dc.w $0000
-
- copper:
- ds.b 2100
-
- textptr: dc.l texttab
-
-
- texttab: dc.b " YYYYYOOOOO MY LATEST WICKED SINE SCROLLY !!!"
- dc.b ' TESTING TESTING 1 2 3 GREETINGS TO EVERYBODY '
- DC.B ' MY FIRST SINEYSCROLL.....'
-
- DC.B 'NOT BAD EH ????? '
- EVEN
-
-
- nextsine: dc.l sinetab
-
-
- sinetab:
-
- dc.w 0,40,80,120,120,160,200,240,280
- dc.w 320,320,360,400,440,440
- dc.w 480,520,560,560,600,600,640,640
- dc.w 680,680,720,720,720,760,760,760,800,800,800,800,800,800,800
- dc.w 800,800,800,800,760,760,760,720,720,720,680,680,640,640
- dc.w 600,600,560,560,520,480,440,440,400,360,320
- dc.w 320,280,240,200,160,120,120,80,40,0,-40,-80,-120
- dc.w -120,-160,-200,-240,-280,-320,-320,-360,-400,-440,-440
- dc.w -480,-520,-560,-560,-600,-600,-640,-640,-680,-680,-720,-720
- dc.w -720,-760,-760,-760,-800,-800,-800,-800,-800,-800,-800,-800
- dc.w -800,-800,-800,-760,-760,-760,-720,-720,-720,-680,-680
- dc.w -640,-640,-600,-600,-560,-560,-520,-480,-440,-440,-400
- dc.w -360,-320,-320,-280,-240,-200,-160,-120,-120,-80,-40
-
-
- endsine:dc.w 0
-
- sinesize=endsine-sinetab
-
- makecopper:
- lea copper(pc),a0
- move.w #$000f,d0 ;beam
- move.w #$0000,d1 ;colour
- loop2:
- move.w d0,(a0)+
- move.w #$fffe,(a0)+
- move.w #$0182,(a0)+
- move.w d1,(a0)+
- cmpi.w #$ff0f,d0
- beq end
- add.w #$0100,d0
- add.w #$0010,d1
- jmp loop2
- end:
- move.l #$fffffffe,(a0)+
- rts
-
- fontmap:
- incbin "df1:Font.map"
-
-